package com.wande.dataplatform.service;

import com.wande.common.mybatis.core.page.PageQuery;
import com.wande.common.mybatis.core.page.TableDataInfo;
import com.wande.dataplatform.domain.dto.EtlTaskDTO;
import com.wande.dataplatform.domain.vo.EtlInstanceVO;
import com.wande.dataplatform.domain.vo.EtlTaskVO;
import com.wande.dataplatform.etl.executor.EtlProgress;

/**
 * ETL任务服务接口
 *
 * @author dataplatform
 */
public interface IEtlTaskService {

    /**
     * 创建ETL任务
     *
     * @param dto ETL任务DTO
     * @return 任务ID
     */
    Long createTask(EtlTaskDTO dto);

    /**
     * 更新ETL任务
     *
     * @param dto ETL任务DTO
     * @return 是否成功
     */
    Boolean updateTask(EtlTaskDTO dto);

    /**
     * 删除ETL任务
     *
     * @param id 任务ID
     * @return 是否成功
     */
    Boolean deleteTask(Long id);

    /**
     * 获取ETL任务详情
     *
     * @param id 任务ID
     * @return ETL任务VO
     */
    EtlTaskVO getTaskById(Long id);

    /**
     * 分页查询ETL任务列表
     *
     * @param pageQuery 分页参数
     * @return 分页结果
     */
    TableDataInfo<EtlTaskVO> listTasks(PageQuery pageQuery);

    /**
     * 执行ETL任务
     *
     * @param id 任务ID
     * @return 实例ID
     */
    Long executeTask(Long id);

    /**
     * 停止ETL任务
     *
     * @param instanceId 实例ID
     * @return 是否成功
     */
    Boolean stopTask(Long instanceId);

    /**
     * 获取执行进度
     *
     * @param instanceId 实例ID
     * @return 执行进度
     */
    EtlProgress getProgress(Long instanceId);

    /**
     * 分页查询任务实例列表
     *
     * @param taskId 任务ID
     * @param pageQuery 分页参数
     * @return 分页结果
     */
    TableDataInfo<EtlInstanceVO> listInstances(Long taskId, PageQuery pageQuery);
}
